<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var arr = [
            {
                id: 1,
                title: '首页',
                children: [],

            },
            {
                id: 2,
                title: '用户管理',
                children: [
                    {
                        id: 21,
                        title: '添加用户',
                        children: [],

                    }, {
                        id: 22,
                        title: '用户列表',

                        children: [],
                        premission: 1
                    }, {
                        id: 23,
                        title: '修改用户',
                        children: [],
                    }

                ]
            }
            ,
            {
                id: 3,
                title: '文章管理',
                children: [
                    {
                        id: 31,
                        title: '添加文章',
                        children: [],
                    }, {
                        id: 32,
                        title: '文章列表',

                        children: [],
                        premission: 1
                    }, {
                        id: 33,
                        title: '修改文章',
                        children: [],
                    }

                ]
            }, {
                id: 4,
                title: '系统管理',
                children: []
            },
        ]

        // 1-需要给数组中每一个对象 都添加一个label属性，属性值跟title一样

        // 2-删除给数组中每一个对象的children属性，如果他们空数组

        // 3-删除 数组中 每一个对象 属性 premission 不为1的元素


        arr.forEach(v => {
            // 添加lable属性
            v.label = v.title;
            // 判断数组为空数组  arr.length == 0
            // 不能下面 v.children == []
            // 每次使用[] 都是 新创建的一个数组（对象），他们在 堆中都有自己的内存（内存地址）
            if (v.children.length === 0) {
                delete v.children
            } else {
                // 遍历v的children属性
                v.children.forEach(item => {
                    // 添加lable属性
                    item.label = item.title




                })

                // 判断 孩子的 premission 不为1 ，删除这个元素
                // 过滤出 为为1的，相当于删除了 不为1的
                v.children = v.children.filter(v => v.premission === 1);

            }


        });
        console.log(arr);

        // 堆和栈
        var arr222 = [];//new Array  创建新数组-- 内存地址是001
        var arr333 = [];//new Array  又会创建一个新数组  --- 002
        console.log(arr222 === arr333);


        // 判断一个对象是不是 空对象  {}  
        // 判断一个对象是不是 null


        var o1 = {};
        if (o1 === null) {

        }

        /*
            基础类型--判断 只要两边一样 返回true  （NaN ===NaN）
            复杂类型-两边长得一样，有可能不等
            {}==={}  []===[]
        */
        console.log({ name: 'zhansan' } === null);//false
        console.log({} === null);//false
        console.log(null === null);///true 

        if (objKeyCount(o1) == 0) {
            console.log(111);
        } else {
            console.log(22);
        }

        function objKeyCount(obj) {
            let count = 0
            for (var key in obj) {
                count++;
            }
            return count;
        }


        var p1 = {};
        var p2 = p1;//把p1的地址 存入 p2变量中   地址传递  p1 和p2的地址是一样
        console.log(p2 === p1)//true
        console.log(p2 === {})//false

    </script>

</body>

</html>